<?php
/**
 * @author Qiong Wu <papa0924@gmail.com>
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.windframework.com
 *
 * @version $Id: PwApplication.php 24585 2013-02-01 04:02:37Z jieyin $
 */
class PwApplication
{
    /**
     * 添加应用.
     *
     * @param PwApplicationDm $application
     *
     * @return PwError true
     */
    public function add($application)
    {
        $error = $application->beforeAdd();
        if (true !== $error) {
            return new PwError('APPCENTER:validate.fail', array('error' => $error));
        }

        return $this->_load()->add($application->getData());
    }

    /**
     * 更具应用ID更新应用.
     *
     * @param PwApplicationDm $application
     *
     * @return PwError true
     */
    public function update($application)
    {
        if (true !== ($error = $application->beforeUpdate())) {
            return new PwError('APPCENTER:validate.fail',
            array('error' => $error));
        }
        $_r = $this->_load()->update($application->getField('app_id'), $application->getData());
        if (!$_r) {
            return new PwError('APPCENTER:update.fail');
        }

        return true;
    }

    /**
     * 根据appid删除.
     *
     * @param int $app_id
     *
     * @return PwError|bool
     */
    public function delByAppId($app_id)
    {
        return $this->_load()->delByAppId($app_id);
    }

    /**
     * 根据应用ID查找应用.
     *
     * @param string $appId
     *
     * @return PwError boolean
     */
    public function findByAppId($appId)
    {
        return $this->_load()->findByAppId($appId);
    }

    /**
     * 根据应用名称模糊搜索.
     *
     * @param string $name
     * @param int    $num
     * @param int    $start
     *
     * @return array
     */
    public function searchByName($name, $num = 10, $start = 0)
    {
        return $this->_load()->searchByName($name, $num, $start);
    }

    /**
     * 统计搜索结果.
     *
     * @param string $name
     *
     * @return int
     */
    public function countSearchByName($name)
    {
        return $this->_load()->countSearchByName($name);
    }

    /**
     * 根据应用别名查找应用.
     *
     * @param string $alias
     *
     * @return PwError|Ambigous <multitype:, boolean, multitype:unknown , mixed>
     */
    public function findByAlias($alias)
    {
        return $this->_load()->findByAlias($alias);
    }

    /**
     * 根据应用别名查找应用注册信息，返回app数据.
     *
     * @param array $alias
     *
     * @return array
     */
    public function fetchByAlias($alias, $index = 'app_id')
    {
        return $this->_load()->fetchByAlias($alias, $index);
    }

    /**
     * 根据app_id批量获取.
     *
     * @param array $ids
     *
     * @return array
     */
    public function fetchByAppId($ids, $index = 'app_id')
    {
        return $this->_load()->fetchByAppId($ids, $index);
    }

    /**
     * 根据status获取列表.
     *
     * @param int    $num
     * @param int    $start
     * @param int    $status  是否有独立页面
     * @param string $orderby
     *
     * @return array
     */
    public function fetchListByStatus($num = 10, $start = 0, $status = 1, $orderby = 'created_time')
    {
        return $this->_load()->fetchListByStatus($num, $start, $status, $orderby);
    }

    /**
     * 根据status获取总数.
     *
     * @param int $status
     *
     * @return int
     */
    public function countByStatus($status = 1)
    {
        return $this->_load()->countByStatus($status);
    }

    /**
     * app列表.
     *
     * @param int $num
     * @param int $start
     *
     * @return array
     */
    public function fetchByPage($num = 10, $start = 0, $index = 'app_id')
    {
        return $this->_load()->fetchByPage((int) $num, (int) $start, $index);
    }

    /**
     * 获取app总数.
     *
     * @return int
     */
    public function count()
    {
        return $this->_load()->count();
    }

    /**
     * @return PwApplicationDao
     */
    private function _load()
    {
        return Wekit::loadDao('APPCENTER:service.dao.PwApplicationDao');
    }
}
